package controlador;


import java.util.TimeZone;
import javax.swing.table.TableModel;
import modelo.Competencia;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import javax.swing.JButton;
import vista.VentanaRegistrarJuez;
import java.awt.event.ActionListener;
import java.awt.event.KeyListener;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.LinkedList;
import java.util.Locale;
import modelo.Juez;
import vista.ValidacionesGenerales;
import vista.VentanaCompetencias;
import java.util.Random;
import javax.swing.table.DefaultTableModel;
import java.util.Timer;
import modelo.Equipo;
import modelo.Nadador;
import vista.VentanaModeloCompetencia;



public class ControladorCompetencia implements ActionListener,KeyListener{
     private VentanaCompetencias ventaComp;
     private Competencia comp;
     private Juez jue;
     private Nadador nadadores;
     
    public  static LinkedList<Competencia> listaCompetencia= new LinkedList<Competencia>();
    private static LinkedList<Equipo> listaEquipoCopia;
    private static LinkedList<Juez> listaJuezCopia;
     
  
    
 public ControladorCompetencia(){
         ventaComp= new VentanaCompetencias();
        ventaComp.addListener((ActionListener)this);
       listaEquipoCopia= (LinkedList<Equipo>)ControladorRegistrarEquipo.ListaEquipo.clone();
       listaJuezCopia= (LinkedList<Juez>)Juez.ListaJueces.clone();
    
       
          
 }
 

 
    public void actionPerformed(ActionEvent ae) {
   
        
        if (ae.getSource() instanceof JButton)
         { 
           
             JButton boton= (JButton) ae.getSource();
            if (boton.getActionCommand().equals("Generar Competencias")){
                
            generarCompetenciasModalidadLibre();
                }
            
              if (boton.getActionCommand().equals("Salir")){
                  
                 ventaComp.dispose();
                }     
            }
    }
    
       
    public void keyTyped(KeyEvent ke) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void keyPressed(KeyEvent ke) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void keyReleased(KeyEvent ke) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
    
    
    public void generarCompetenciasModalidadLibre(){
        
   
       int  hora =8;
       int minutos=00;
       Calendar fecha= Calendar.getInstance();
       //Calendar HoraMinuto=Calendar.getInstance();
        //hora =HoraMinuto.get(Calendar.HOUR_OF_DAY);
        //minutos = HoraMinuto.get(Calendar.MINUTE);
       
       fecha.add(Calendar.DAY_OF_MONTH, -4);
       
       String cadenadelaFecha= String.format("%1$td-%1$tm-%1$tY", fecha);
      String horaActual= String.valueOf("08"+":"+"00");
   
     LinkedList<Competencia> listaCompetenciaMasculino=new LinkedList<Competencia>();
     LinkedList<Competencia> listaCompetenciaFemenino=new LinkedList<Competencia>();
   
       
    
     Competencia competenciaMasculino;
     Competencia competenciaFemenino ;
    
   if(listaEquipoCopia.size()==0|| listaJuezCopia.size()==0)
       
       vista.MensajesGenerales.mostrarMensajeErrores("Para generar las competencia deben estar cargados los jueces y los equipos con sus nadadores");
       else{
       
       
   
     for (int i=1;i <=4;i++){
         
        
         LinkedList<Integer> listaNumeroAleatorios50metrosMasculino=new LinkedList<Integer>();
        
             for(int k=25;k<=35;k++){
              listaNumeroAleatorios50metrosMasculino.add(k);
      
              }
             
            LinkedList<Integer> listaNumeroAleatorios50metrosFemenino=new LinkedList<Integer>();
         
             for(int k=25;k<=35;k++){
              listaNumeroAleatorios50metrosFemenino.add(k);
             }
          
             LinkedList<Integer> listaNumeroAleatorios50metrosdeCarriles=new LinkedList<Integer>();
         
             for(int l=1;l<=8;l++){
              listaNumeroAleatorios50metrosdeCarriles.add(l);
             }
      
         LinkedList<Nadador> listaNadadoresPorCompetenciaFemenino=new LinkedList<Nadador>();
         LinkedList<Nadador> listaNadadoresPorCompetenciaMasculino=new LinkedList<Nadador>();
     
          competenciaMasculino= new Competencia();
          competenciaFemenino= new Competencia();
           competenciaFemenino.setHoraC(horaActual);
         for (int indiceEquipo1=0;indiceEquipo1<listaEquipoCopia.size();indiceEquipo1++){

           
          LinkedList<Nadador> listaM=new LinkedList<Nadador>();
           LinkedList<Nadador> listaF=new LinkedList<Nadador>();
          
             for ( Nadador nadador:listaEquipoCopia.get(indiceEquipo1).getLista()){
                 if (nadador.getSexo().equals("M")){
                     
                 //    int indiceCronoM=(int)Math.floor(Math.random()*listaNumeroAleatorios50metrosMasculino.size());
		   //  int cronoMasculino= listaNumeroAleatorios50metrosMasculino.get(indiceCronoM).intValue();
                     //nadador.setTiempo(cronoMasculino);
                     
                     listaM.add(nadador);
                  }
                 else{
                 //   int indiceCronoF=(int)Math.floor(Math.random()*listaNumeroAleatorios50metrosFemenino.size());
			
               //   int cronoFemenino= listaNumeroAleatorios50metrosFemenino.get(indiceCronoF).intValue();
                 // listaNumeroAleatorios50metrosFemenino.remove(listaNumeroAleatorios50metrosFemenino.get(indiceCronoF));
                  //nadador.setTiempo(cronoFemenino);
                     
                  listaF.add(nadador);
                     
              
                 
                    }
                 
              //    int indiceCronoM=aleatorio.nextInt(listaNumeroAleatorios50metrosMasculino.size());
                //  int cronoMasculino= listaNumeroAleatorios50metrosMasculino.get(indiceCronoM).intValue();
                 // nadador.setTiempo(cronoMasculino);
               //   listaF.add(nadador);
                  int indiceCronoF=(int)Math.floor(Math.random()*listaNumeroAleatorios50metrosFemenino.size());
		   int cronoFemenino= listaNumeroAleatorios50metrosFemenino.get(indiceCronoF).intValue();
                 listaNumeroAleatorios50metrosFemenino.remove(listaNumeroAleatorios50metrosFemenino.get(indiceCronoF));
                 nadador.setTiempo(cronoFemenino);
                      
             }
               
             int indiceFemenino=(int)Math.floor(Math.random()*listaF.size());
              int indiceMasculino=(int)Math.floor(Math.random()*listaM.size());
			                     
            // int indiceFemenino= aleatorio.nextInt(listaF.size());
            // int indiceMasculino= aleatorio.nextInt(listaM.size());
             listaNadadoresPorCompetenciaMasculino.add(listaM.get(indiceMasculino));
             listaNadadoresPorCompetenciaFemenino.add(listaF.get(indiceFemenino));
            // listaEquipoCopia.get(indiceEquipo1).getLista().remove(listaM.get(indiceMasculino));
            // listaEquipoCopia.get(indiceEquipo1).getLista().remove(listaF.get(indiceFemenino));
            
            // int indiceCarrilF=aleatorio.nextInt(listaNumeroAleatorios50metrosdeCarriles.size());
             //int carrilFemenino=listaNumeroAleatorios50metrosdeCarriles.get(indiceCarrilF).intValue();
             
           // competenciaFemenino.setCarrilesOcupados(carrilFemenino);
            
           }  
       
              if(i==2){
                  hora=8;
                  minutos=30;
                  horaActual= String.valueOf("0"+hora+":"+minutos);
                 }else if(i==3){
                   hora=9;
                   minutos=30;
                   horaActual= String.valueOf("0"+hora+":"+minutos);
                  }else if(i==4){
                  hora=10;
                  minutos=00;
                  horaActual= String.valueOf(hora+":"+minutos+"0");
                   }

              int indiceJuezF= (int)Math.floor(Math.random()*listaJuezCopia.size());   
                competenciaFemenino.setJuezPrincipal(listaJuezCopia.get(indiceJuezF).getNombre());
                competenciaMasculino.setCodigoC("Eliminatoria" + i + "-50 Metros  Masculino");
               competenciaFemenino.setCodigoC("Eliminatoria" + i + "-50 Metros Femenino");
               competenciaFemenino.setModalidad("Libre");
               competenciaFemenino.setFechaC(cadenadelaFecha);
               competenciaFemenino.setHoraC(horaActual);
               competenciaMasculino.setListaNadadores(listaNadadoresPorCompetenciaMasculino);
             //  int indiceJuez=aleatorioJuez.nextInt(listaJuezCopia.size());
               //competenciaFemenino.setJuezPrincipal(listaJuezCopia.get(indiceJuez).getNombre());
               competenciaFemenino.setListaNadadores(listaNadadoresPorCompetenciaFemenino);
                
               listaCompetenciaMasculino.add(competenciaMasculino);
               listaCompetenciaFemenino.add(competenciaFemenino);
               listaJuezCopia.remove(indiceJuezF);
              VentanaModeloCompetencia modeloCompetencia=new VentanaModeloCompetencia(listaCompetenciaFemenino);
               ventaComp.asignarTablaModelo(modeloCompetencia);
     } 
       
     for(Juez jue:listaJuezCopia)
     {
     
     System.out.println("nombre"+ jue.getNombre());
       System.out.println("-----------------------------------");
     }
     
    
    for (Competencia com:listaCompetenciaFemenino){
         System.out.println("-----------------------------------");
       System.out.println(com.getCodigoC());
   
           for (Nadador nad:com.getListaNadadores()){
           System.out.println("cedula"+ nad.getCedula() + "  Nombre:" + nad.getNombre()+  "   Sexo:" + nad.getSexo()+  " Crono:  " + nad.getTiempo()+"carril " + com.getCarrilesOcupados()+" juez"+com.getJuezPrincipal());
         }
       } 
     
             
     }
    }
}

